
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 同步：依次执行，一个结束了，才会执行下一个
    // alert(1)
    // alert(2)
    // alert(3)
    // alert(4)
    // console.log("hello")
    // let a = 10;
    // console.log(a);
    // a = 20;
    // console.log(a);
    // console.log("world")

    // 异步：如：延时器
    // let a = 10;
    // 延时器有两部分组成：延时器方法自身（同步），延迟执行的功能（异步）
    // setTimeout(() => {
    //     a = 20;
    //     console.log(a);     // 20
    // }, 1000);
    // console.log(a);     // 10
    
    let a = 10;
    setTimeout(() => {
        a = 20;
        console.log(a);     // 20
        fn();
    }, 0);
    console.log(a);     // 10

    function fn(){
        console.log(a);     // 20
    }

    // JavaScript是一门单线程的异步编程语言
    // 在js内部，存在两个任务分支：宏任务，微任务
    // 微任务绝对会在宏任务执行完毕后，才会执行
    // 哪些任务会在宏任务上，哪些任务会在微任务上
    // 所有的同步程序都在宏任务上，所有的异步都被开启到微任务上

    // 宏任务↓               |      微任务↓
    // let a = 10;          |      延时器的回调函数()=>{a=20}和时间0
    // setTimeout();        |
    // console.log(a);      |

    // JavaScript的事件循环机制，Event Loop





</script>
</html>